#include "prbthread.h"

#include <QDir>
#include <QFile>
#include <QFileInfoList>
#include <QFileInfo>
#include <QDebug>

PrbThread::PrbThread(QObject *parent) : QThread(parent)
{

}

bool PrbThread::copyFile(const QString &fromDir, const QString &toDir, bool coverFileIfExist)
{
    QDir sourceDir(fromDir);
    QDir targetDir(toDir);
    if(!targetDir.exists()){    /**< 如果目标目录不存在，则进行创建 */
        if(!targetDir.mkdir(targetDir.absolutePath()))
            return false;
    }

    QFileInfoList fileInfoList = sourceDir.entryInfoList();
    foreach(QFileInfo fileInfo, fileInfoList){
        if(fileInfo.fileName() == "." || fileInfo.fileName() == "..")
            continue;

        if(fileInfo.isDir()){    /**< 当为目录时，递归的进行copy */
            if(!copyFile(fileInfo.filePath(),targetDir.filePath(fileInfo.fileName()),coverFileIfExist))
                return false;
        }
        else{            /**< 当允许覆盖操作时，将旧文件进行删除操作 */
            if(coverFileIfExist && targetDir.exists(fileInfo.fileName())){
                targetDir.remove(fileInfo.fileName());

            }

            /// 进行文件copy
            if(!QFile::copy(fileInfo.filePath(),
                targetDir.filePath(fileInfo.fileName()))){
                    return false;
            }

            emit sendFileInfo(fileInfo);
        }
    }
    return true;
}

void PrbThread::recvPath(QString fStr, QString tStr)
{
    m_fromStr = fStr;
    m_toStr = tStr;
}

void PrbThread::run()
{
    if(copyFile(m_fromStr,m_toStr,true))
    {
        emit sendStatus(true);
    }
    else {
        emit sendStatus(false);
    }
}
